package com.main.taxsystem;

import java.util.ArrayList;

import android.content.ContentResolver;
import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.net.Uri;
import android.os.Bundle;
import android.util.Log;

import com.main.taxsystem.TableInfoSet.AlreadyAnswerQuestionTableInfo;
import com.main.taxsystem.TableInfoSet.BranchMapTableInfo;
import com.main.taxsystem.TableInfoSet.MyQestionTableInfo;

/**
 * 提供了数据库中所有表的操作接口
 * 所有操作请在异步线程中执行
 * @author 程文智
 */
public class QueryHelper {
	private static final String TAG = "QueryHelper";
	Context context = null;
	ContentResolver contentResolver = null;
	
	public QueryHelper(Context context){
		this.context = context;
		contentResolver = context.getContentResolver();
	}
	
	/*
	 * alreadyanswer_question表单接口
	 */
	
	/**
	 * 获得 表单中的所有数据,并以Cursor的形式返回<br>
	 * 获得的Cursor可用户CursorAdapter中，但不会同步数据库更新<br>
	 * 如果需要获得可同步数据库更新的Cursor,请调用{@link #queryAlreadyAnswerQuestionForNotificationCursor()}<br>
	 * 如果不会使用Cursor的可以调用 {@link com.main.taxsystem.QueryHelper #queryAlreadyAnswerQuestionForBundleArray() queryAlreadyAnswerQustionForBundleArray}
	 * 获取保存了所有数据的ArrayList<Bundle>
	 */
	public Cursor queryAlreadyAnswerQuestion(){
		Log.v(TAG,"queryAlreadyAnswerQuestion()");
		return contentResolver.query(TaxSystemContentProvider.URI_ALREADY_ANSWER_QUESTION,
				AlreadyAnswerQuestionTableInfo.COLUMNS,
				null, null, null);
	}
	
	/**
	 * 获得alreadyanswer_question 表单中的所有数据,并以可同步数据库更新的Cursor的形式返回<br>
	 * @return
	 */
	public Cursor queryAlreadyAnswerQuestionForNotificationCursor(){
		Cursor  c = queryAlreadyAnswerQuestion();
		c.setNotificationUri(contentResolver, TaxSystemContentProvider.URI_ALREADY_ANSWER_QUESTION);
		return c;
	}
	/**
	 * 获得alreadyanswer_question 表单中的所有数据,并以ArrayList<Bundle>的形式返回<br>
	 * 每个Bundle可通过指定的列名获取对应的内容，所有数据均为String类型
	 * 这个ArrayList 不会同步数据库更新。需要再次调用本方法获取新的数据。
	 * @return 返回表单中的所有数据.如果表单中不存在数据,则返回null
	 */
	public ArrayList<Bundle> queryAlreadyAnswerQuestionForBundleArray(){
		Cursor cursor = queryAlreadyAnswerQuestion();
		ArrayList<Bundle> list = new ArrayList<Bundle>();
		int count = cursor.getCount();
		if(count<1)
			return null;
		Bundle b = null;
		while(cursor.moveToNext()){
			b = new Bundle();
			b.putInt(AlreadyAnswerQuestionTableInfo.COLUMN_NAME_QUESTION_ID, 
					cursor.getInt(cursor.getColumnIndex(MyQestionTableInfo.COLUMN_NAME_QUESTION_ID)));
			b.putString(AlreadyAnswerQuestionTableInfo.COLUMN_NAME_QUESTION_TITLE,
					cursor.getString(cursor.getColumnIndex(AlreadyAnswerQuestionTableInfo.COLUMN_NAME_QUESTION_TITLE)));
			b.putString(AlreadyAnswerQuestionTableInfo.COLUMN_NAME_CREATE_TIME,
					cursor.getString(cursor.getColumnIndex(AlreadyAnswerQuestionTableInfo.COLUMN_NAME_CREATE_TIME)));
			b.putString(AlreadyAnswerQuestionTableInfo.COLUMN_NAME_ANSWER_CONTENT,
					cursor.getString(cursor.getColumnIndex(AlreadyAnswerQuestionTableInfo.COLUMN_NAME_ANSWER_CONTENT)));
			list.add(b);
		}
		return list;
	}

	/**
	 * 向alreadyanswer_question表单中插入新一行
	 * @param questionId
	 * @param questionTitle
	 * @param createTime
	 * @param answerContent
	 */
	public Uri insertAlreadyAnswerQuestionValues(int questionId,String questionTitle,String createTime,String answerContent){
		ContentValues values = new ContentValues();
		values.put(AlreadyAnswerQuestionTableInfo.COLUMN_NAME_QUESTION_ID, questionId);
		values.put(AlreadyAnswerQuestionTableInfo.COLUMN_NAME_QUESTION_TITLE, questionTitle);
		values.put(AlreadyAnswerQuestionTableInfo.COLUMN_NAME_CREATE_TIME, createTime);
		values.put(AlreadyAnswerQuestionTableInfo.COLUMN_NAME_ANSWER_CONTENT, answerContent);
		
		Log.v(TAG,"queryAlreadyAnswerQuestionValues(): insert new value = "+values.toString());
		return contentResolver.insert(TaxSystemContentProvider.URI_ALREADY_ANSWER_QUESTION, values);
	}
	
	/*
	 * myquestion表单接口
	 */
	
	/**
	 * 获得myquestion 表单中的所有数据,并以Cursor的形式返回<br>
	 * 获得的Cursor可用户CursorAdapter中，但不会同步数据库更新<br>
	 * 如果需要获得可同步数据库更新的Cursor,请调用{@link #queryMyQuestionForNotificationCursor()}<br>
	 * 如果不会使用Cursor的可以调用 {@link com.main.taxsystem.QueryHelper #queryMyQuestionForBundleArray() queryAlreadyAnswerQustionForBundleArray}
	 * 获取保存了所有数据的ArrayList<Bundle>
	 */
	public Cursor queryMyQuestion(){
		Log.v(TAG,"queryMyQuestion()");
		return contentResolver.query(TaxSystemContentProvider.URI_ALREADY_ANSWER_QUESTION,
				AlreadyAnswerQuestionTableInfo.COLUMNS,
				null, null, null);
	}
	
	/**
	 * 获得myquestion 表单中的所有数据,并以可同步数据库更新的Cursor的形式返回<br>
	 * @return
	 */
	public Cursor queryMyQuestionForNotificationCursor(){
		Cursor  c = queryMyQuestion();
		c.setNotificationUri(contentResolver, TaxSystemContentProvider.URI_MY_QUESTION);
		return c;
	}
	/**
	 * 获得myquestion 表单中的所有数据,并以ArrayList<Bundle>的形式返回<br>
	 * 每个Bundle可通过指定的列名获取对应的内容，所有数据均为String类型
	 * 这个ArrayList 不会同步数据库更新。需要再次调用本方法获取新的数据。
	 * @return 返回表单中的所有数据.如果表单中不存在数据,则返回null
	 */
	public ArrayList<Bundle> queryMyQuestionForBundleArray(){
		Cursor cursor = queryMyQuestion();
		ArrayList<Bundle> list = new ArrayList<Bundle>();
		int count = cursor.getCount();
		if(count<1)
			return null;
		Bundle b = null;
		while(cursor.moveToNext()){
			b = new Bundle();
			for(int i=0;i<cursor.getColumnCount();++i){
				b.putString(cursor.getColumnName(i), cursor.getString(i));
			}
			list.add(b);
		}
		return list;
	}

	/**
	 * 向myquestion表单中插入新一行
	 * @param questionId
	 * @param questionTitle
	 * @param createTime
	 * @param answerContent
	 */
	public Uri insertMyQuestionValues(int questionId,String questionTitle,String createTime,int answerCount,boolean unread){
		ContentValues values = new ContentValues();
		values.put(MyQestionTableInfo.COLUMN_NAME_QUESTION_ID, questionId);
		values.put(MyQestionTableInfo.COLUMN_NAME_QUESTION_TITLE, questionTitle);
		values.put(MyQestionTableInfo.COLUMN_NAME_CREATE_TIME, createTime);
		values.put(MyQestionTableInfo.COLUMN_NAME_ANSWER_COUNT, answerCount);
		values.put(MyQestionTableInfo.COLUMN_NAME_UNREAD, unread);
		
		Log.v(TAG,"insertMyQuestionValues(int, String, String, int, boolean)(): insert new value = "+values.toString());
		return contentResolver.insert(TaxSystemContentProvider.URI_MY_QUESTION, values);
	}
	
	/*
	 * 办税地图
	 */
	
	/**
	 * 获得branch_map 表单中的所有数据,并以Cursor的形式返回<br>
	 * 获得的Cursor可用户CursorAdapter中，但不会同步数据库更新<br>
	 * 如果需要获得可同步数据库更新的Cursor,请调用{@link #queryBranchMapTableForNotificationCursor()}<br>
	 * 如果不会使用Cursor的可以调用 {@link com.main.taxsystem.QueryHelper #queryBranchMapTableForBundleArray() queryAlreadyAnswerQustionForBundleArray}
	 * 获取保存了所有数据的ArrayList<Bundle>
	 */
	public Cursor queryBranchMapTable(){
		Log.v(TAG,"queryBranchMapTable()");
		return contentResolver.query(TaxSystemContentProvider.URI_BRANCH_MAP,
				BranchMapTableInfo.COLUMNS,
				null, null, null);
	}
	
	/**
	 * 获得branch_map 表单中的所有数据,并以可同步数据库更新的Cursor的形式返回<br>
	 * @return
	 */
	public Cursor queryBranchMapTableForNotificationCursor(){
		Cursor  c = queryBranchMapTable();
		c.setNotificationUri(contentResolver, TaxSystemContentProvider.URI_BRANCH_MAP);
		return c;
	}
	/**
	 * 获得branch_map 表单中的所有数据,并以ArrayList<Bundle>的形式返回<br>
	 * 每个Bundle可通过指定的列名获取对应的内容，所有数据均为String类型
	 * 这个ArrayList 不会同步数据库更新。需要再次调用本方法获取新的数据。
	 * @return 返回表单中的所有数据.如果表单中不存在数据,则返回null
	 */
	public ArrayList<Bundle> queryBranchMapTableForBundleArray(){
		Cursor cursor = queryMyQuestion();
		ArrayList<Bundle> list = new ArrayList<Bundle>();
		int count = cursor.getCount();
		if(count<1)
			return null;
		Bundle b = null;
		while(cursor.moveToNext()){
			b = new Bundle();
			for(int i=0;i<cursor.getColumnCount();++i){
				b.putString(cursor.getColumnName(i), cursor.getString(i));
			}
			list.add(b);
		}
		return list;
	}

	/**
	 * 向branch_map表单中插入新一行
	 */
	public Uri insertBranchMapTableValues(String branchId,String branchName,String branchAddress,String longitude,String latitude){
		ContentValues values = new ContentValues();
		values.put(BranchMapTableInfo.COLUMN_NAME_BRANCH_ID, branchId);
		values.put(BranchMapTableInfo.COLUMN_NAME_BRANCH_NAME, branchName);
		values.put(BranchMapTableInfo.COLUMN_NAME_ADDRESS, branchAddress);
		values.put(BranchMapTableInfo.COLUMN_NAME_LONGITUDE, longitude);
		values.put(BranchMapTableInfo.COLUMN_NAME_LATITUDE, latitude);
		
		Log.v(TAG,"insertBranchMapTableValues(): insert new value = "+values.toString());
		return contentResolver.insert(TaxSystemContentProvider.URI_BRANCH_MAP, values);
	}

}
